package game.core;

import game.gui.Janela;
import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Graphics2D;
import java.awt.Window;

/**
 * Inicializa a tela e executa funções importantes como o Loop principal, o Pause e
 * o Load Game.
 * @author baldacim
 */
public abstract class NucleoDoGame {

    protected  Janela tela;
    protected boolean rodando;
    int x=0, y=1;

    /**
     * Chama os metodos que inicializa a tela e Loop principal.
     */
     public void run() {

            init();
            gameLoop();
        }

     /**
      * Cria a tela com display de 800x600 e coloca em modo FullScreen exclusivo.
      */
     public void init() {
        tela = new Janela();
        DisplayMode displayMode = new DisplayMode(800, 600, 16, 0);
        tela.setFullScreen(displayMode);

        Window window = tela.getFullScreenWindow();
        window.setBackground( Color.BLACK );
        window.setForeground( Color.WHITE );

        rodando = true;
    }

     /**
      * Gera o loop principal contando o tempo decorrido desde a ultima execução e
      * realiza as atualizações de acordo com o tempo decorrido.
      */
     public void gameLoop() {
        long startTime = System.currentTimeMillis();
        long currTime = startTime;

        while ( rodando ) {

            long elapsedTime =
                    System.currentTimeMillis() - currTime;
            currTime += elapsedTime;

            // atualiza os elementos do jogo
            update( elapsedTime );
            // desenha
            Graphics2D g = tela.getGraphics();
            draw( g );
            g.dispose();
            //troca o buffer da tela
            tela.update();

        }
    }


     public abstract void draw(Graphics2D g);

     public abstract void update(long elapsedTime);

}
